#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <string>

// 使用 telnet localhost 8080 测试效果

using boost::asio::ip::tcp;

int main() {
    try {
        boost::asio::io_context io;
        
        // 创建接受器
        tcp::acceptor acceptor(io, tcp::endpoint(tcp::v4(), 8080));
        
        std::cout << "服务器启动，监听端口 8080..." << std::endl;
        
        for (;;) {
            // 接受连接（同步阻塞）
            tcp::socket socket(io);
            acceptor.accept(socket);
            
            std::cout << "客户端连接" << std::endl;
            
            // 读取数据
            boost::array<char, 128> buf;
            boost::system::error_code error;
            
            size_t len = socket.read_some(boost::asio::buffer(buf), error);
            
            if (error == boost::asio::error::eof) {
                std::cout << "连接关闭" << std::endl;
                break;
            } else if (error) {
                throw boost::system::system_error(error);
            }
            
            // 回显数据
            boost::asio::write(socket, boost::asio::buffer(buf, len));
        }
    }
    catch (std::exception& e) {
        std::cerr << "错误: " << e.what() << std::endl;
    }
    
    return 0;
}